5.2 Barplots und Histogramme#
Barplots (Balken- oder Säulendiagramme) sind die am häufigsten verwendeten Visualisierungen für kategoriale Daten. In diesem Kapitel lernen wir, wie man mit Plotly einen Barplot erstellt und wie man ihn von einem Histogramm unterscheidet, mit dem er oft verwechselt wird.
Lernziele#
Lernziele
Sie wissen, was ein Barplot ist.
Sie können ein Säulendiagramm von einem Balkendiagramm unterscheiden.
Sie können mit der Funktion bar() des Plotly-Express-Moduls einen Barplot generieren lassen.
Sie wissen, wie aus metrischen Daten ein Histogramm erzeugt wird.
Sie können mit der Funktion histogram() des Plotly-Express-Moduls ein Histogramm erzeugen lassen.
Barplots#
Im letzten Kapitel haben wir uns mit kategorialen (qualitativen) Daten
auseinandergesetzt. Um solche Daten zu visualisieren und zu vergleichen,
benötigen wir geeignete Diagramme. Ein Boxplot ist hierfür nicht geeignet, da
man mit kategorialen Daten keine Rechenoperationen wie Mittelwertbildung oder
die Berechnung von Streuungsmaßen durchführen kann. Eine Methode, die wir
bereits kennengelernt haben, ist .value_counts(). Sie zählt, wie oft jeder
einzigartige Wert in einer Datenreihe vorkommt. Die Anzahl der Werte pro
Kategorie wird mit dem sogenannten Barplot visualisiert.
Ein Barplot muss nicht nur die Anzahl der Werte pro Kategorie zeigen. Er kann jede metrische (quantitative) Information darstellen, die einer Kategorie zugeordnet ist. Dabei werden prinzipiell zwei Varianten unterschieden. Zum einen können die Kategorien entlang der x-Achse aneinandergereiht werden. Die Höhe der Rechtecke repräsentiert dann den Zahlenwert dieser Kategorie. Da die Rechtecke an Säulen erinnern, wird diese Variante Säulendiagramm genannt. Die andere Möglichkeit ist, die Kategorien untereinander entlang der y-Achse aufzuführen. Dann ist die Länge der Rechtecke repräsentativ für den Zahlenwert dieser Kategorie. Diese Variante wird Balkendiagramm genannt.
Probieren wir Barplots am Beispiel der Autoscout24-Verkaufspreise für Autos aus, die 2020 zugelassen wurden. Zuerst laden wir die Daten und verschaffen uns einen Überblick.
import pandas as pd
data = pd.read_csv('autoscout24_DE_2020.csv')
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 18566 entries, 0 to 18565
Data columns (total 14 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Marke 18566 non-null object
1 Modell 18566 non-null object
2 Farbe 18546 non-null object
3 Erstzulassung 18566 non-null object
4 Jahr 18566 non-null int64
5 Preis (Euro) 18566 non-null int64
6 Leistung (kW) 18552 non-null float64
7 Leistung (PS) 18552 non-null float64
8 Getriebe 18566 non-null object
9 Kraftstoff 18566 non-null object
10 Verbrauch (l/100 km) 15501 non-null object
11 Verbrauch (g/km) 18566 non-null object
12 Kilometerstand (km) 18566 non-null float64
13 Bemerkungen 18566 non-null object
dtypes: float64(3), int64(2), object(9)
memory usage: 2.0+ MB
Mit der Methode .value_counts() lassen wir Python die Anzahl der Autos pro
Marke bestimmen.
anzahl_pro_marke = data['Marke'].value_counts()
anzahl_pro_marke.info()
<class 'pandas.core.series.Series'>
Index: 41 entries, ford to cadillac
Series name: count
Non-Null Count Dtype
-------------- -----
41 non-null int64
dtypes: int64(1)
memory usage: 656.0+ bytes
Schauen wir uns die ersten zehn Einträge an:
anzahl_pro_marke.head(10)
Marke
ford 1632
opel 1538
skoda 1518
seat 1492
mercedes-benz 1454
volkswagen 1359
audi 1190
bmw 1039
toyota 783
mini 621
Name: count, dtype: int64
Die Methode .value_counts() sortiert die Einträge standardmäßig von der
höchsten zur niedrigsten Anzahl.
Mit nur wenigen Zeilen Code können wir mit der Funktion bar() aus dem
Plotly-Express-Modul eine Visualisierung erstellen. Zuerst importieren wir das
Modul, dann erzeugen wir das Diagramm mit bar() und zuletzt lassen wir das
Diagramm mit show() anzeigen.
import plotly.express as px
fig = px.bar(anzahl_pro_marke)
fig.show()
Obwohl Plotly Express bereits eine ansprechende Visualisierung bietet, könnten
die automatisch generierten Beschriftungen “index”, “value” und “variable”
verbessert werden. Außerdem sollte ein Diagrammtitel hinzugefügt werden. Der
Titel kann direkt in der bar()-Funktion über das title= Argument gesetzt
werden. Für die Achsenbeschriftungen und den Legendentitel verwenden wir die
Funktion update_layout(). Die Argumente xaxis_title= und yaxis_title=
modifizieren die Beschriftung der x- und y-Achse. Mit legend_title= wird der
Titel der Legende neu beschriftet.
fig = px.bar(anzahl_pro_marke, title='Autoscout24 (Zulassungsjahr 2020)')
fig.update_layout(
xaxis_title='Marke',
yaxis_title='Anzahl Autos',
legend_title='Anzahl Autos pro Marke',
)
fig.show()
Histogramm#
Während Barplots in erster Linie kategoriale Daten visualisieren, dienen
Histogramme zur Darstellung metrischer (quantitativer) Daten. Ein Barplot zeigt
typischerweise die Anzahl der Werte pro Kategorie. Bei metrischen Daten wäre
eine solche Darstellung oft nicht sinnvoll. Nehmen wir als Beispiel die
Kilometerstände von Autos. Wir lassen zuerst mit der Methode .unique() die
verschiedenen Kilometerstände bestimmen. Das Ergebnis ist ein sogenanntes
NumPy-Array, das hier wie eine Liste benutzt werden kann. Mit Hilfe der
len()-Funktion können wir die Anzahl der Einträge berechnen.
kilometerstaende = data['Kilometerstand (km)'].unique()
anzahl_kilometerstaende = len(kilometerstaende)
print(f'Es gibt {anzahl_kilometerstaende} verschiedene Kilometerstände.')
Es gibt 10730 verschiedene Kilometerstände.
Mit über 10.000 verschiedenen Kilometerständen wäre eine direkte Visualisierung nicht zielführend. Um dennoch eine sinnvolle Analyse durchzuführen, können wir die Daten in Kategorien einteilen. Dazu bestimmen wir das Minimum und das Maximum der Kilometerstände.
minimaler_kilometerstand = data['Kilometerstand (km)'].min()
maximaler_kilometerstand = data['Kilometerstand (km)'].max()
print(f'minimaler Kilometerstand: {minimaler_kilometerstand}')
print(f'maximaler Kilometerstand: {maximaler_kilometerstand}')
minimaler Kilometerstand: 0.0
maximaler Kilometerstand: 435909.0
Die Daten reichen von Neuwagen (minimaler Kilometerstand 0 km) bis zu Autos mit
hohem Kilometerstand (maximaler Kilometerstand 435909 km). Wir können diesen
Bereich in gleichmäßige Kategorien unterteilen. Wählen wir beispielsweise 10
Kategorien, so würde die 1. Kategorie alle Autos mit einem Kilometerstand von 0
km bis 50000 km umfassen. Die 2. Kategorie geht dann von 50000 km bis 100000 km
usw. Um jetzt zu ermitteln, wie viele Autos in die jeweilige Kategorie fallen,
könnten wir ein kleines Python-Programm schreiben. Tatsächlich brauchen wir das
nicht, denn diese Funtkionalität ist bereits in der histogram()-Funktion
integriert, die auch die Visualisierung übernimmt.
Wir übergeben der Funktion als erstes Argument die Daten und als (optionales)
Argument, wie viele Kategorien wir uns wünschen. Die künstlich erfundenen
Kategorien werden auch als Tonnen bezeichnet. Daher lautet das Argument zum
Setzen der Anzahl der Tonnen nbins=, so wie der englische Begriff »number of
bins«.
fig = px.histogram(data['Kilometerstand (km)'], nbins=10,
title='10 künstlich erzeugte Kategorien bzgl. des Kilomterstandes (km)')
fig.update_layout(
xaxis_title='Kategorien der Kilometerstände (km)',
yaxis_title='Anzahl Autos',
legend_title='Anzahl Autos pro Kategorie',
)
fig.show()
Die meisten Autos haben weniger als 200000 km auf dem Kilometerzähler.
Ein charakteristisches Merkmal von Histogrammen ist, dass die Balken ohne Lücke aneinander liegen, was die kontinuierliche Natur der metrischen Daten widerspiegelt. Die Anzahl der Kategorien (Bins) beeinflusst die Darstellung maßgeblich und sollte sorgfältig gewählt werden. Auch können die Histogramm-Kategorien nicht in eine andere Reihenfolge gebracht werden.
Die Anzahl der Kategorien ist ein sehr wichtiger Faktor bei der Visualisierung. Werden zu wenige Kategorien gewählt, werden auch nicht die Unterschiede sichtbar. Werden zu viele Kategorien gewählt, sind ggf. einige Kategorien leer.
Mini-Übung
Wählen Sie verschiedene Werte für die Anzahl der Kategorien aus. Welche Anzahl an Kategorien ist für diesen Datensatz sinnvoll und warum?
Zusammenfassend wird ein Histogramm folgendermaßen beschrieben.
Was ist … ein Histogramm?
Ein Histogramm ist eine grafische Darstellung, bei der metrische (quantitative) Daten in Kategorien eingeteilt und dann die Anzahl der Werte pro Kategorie durch die Höhe eines Balkens dargestellt wird.
Zusammenfasssung und Ausblick#
In diesem Kapitel wurden zwei wichtige Diagrammtypen vorgestellt: der Barplot und das Histogramm. Obwohl beide mit Rechtecken arbeiten, haben sie unterschiedliche Anwendungsbereiche und sollten nicht verwechselt werden. Während der Barplot ideal für kategoriale Daten ist, eignet sich das Histogramm zur Visualisierung metrischer (quantitativer) Daten. Im nächsten Kapitel widmen wir uns dem Thema Datenfilterung.